package com.fintech.third.service.bairong;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fintech.common.enums.RespStatus;
import com.fintech.common.service.BaseServiceImpl;
import com.fintech.common.util.ApiResponse;
import com.fintech.third.constant.ThirdMethodConstants;
import com.fintech.third.model.ThirdEffectDTO;
import com.fintech.third.model.bairong.MultipleApplications;
import com.fintech.third.model.bairong.SpecialList;
import com.fintech.third.model.interfacedata.EdcDataCallOperationRecordsDto;
import com.marvels.common.utils.MarvelsLogUtil;

import net.sf.json.JSONObject;

/**
 * 百融数据查询（该服务类仅供给智盒子用）
 * 
 * @author tux
 *
 */
@Service("lgdbBaiRong")
public class LgdbBaiRongImpl extends BaseServiceImpl implements LgdbBaiRongService {

	@Autowired(required = true)
	private BaiRongService BaiRong;

	/**
	 * 多次申请核查v2(用户近7/15天、1/3/6个月在百融的虚拟信贷联盟(银行、非银、非银细分类型)中的多次信贷申请情况)
	 * 
	 * @param json
	 * @param reqMap
	 * @return
	 */
	public ApiResponse<MultipleApplications> multipleApplicationsReport(JSONObject json,
			ThirdEffectDTO thirdEffectDTO) {
		MarvelsLogUtil.getInstance().info("===LgdbBaiRongImpl.multipleApplicationsReport多次申请核查v2=== json：" + json + " thirdEffectDTO："
				+ thirdEffectDTO);

		ApiResponse<MultipleApplications> apiResponse = new ApiResponse<MultipleApplications>();
		thirdEffectDTO.setInterfaceCode(ThirdMethodConstants.BR0002);
		/**
		 * 智盒子查询第三方时效性临时逻辑<BR>
		 * 1.直接拿身份证或者手机号码去时效性中间表里面查询，看是否存在有效记录 <BR>
		 * 2.如果存在，则取最新的一条记录，不再查询第三方<BR>
		 * 3.如果不存在，则直接查询第三方，成功后，向时效性中间表插入一条记录（有效时间写死）<BR>
		 */
		EdcDataCallOperationRecordsDto recordsDto = selectEdcDataCallOperationRecordSig(thirdEffectDTO);

		if (recordsDto == null) { // 时间有效期内无数据，直接查询第三方
			MarvelsLogUtil.getInstance().info("===LgdbBaiRongImpl.multipleApplicationsReport 时间有效期内无数据");
			// 调用以前接口
			apiResponse = BaiRong.multipleApplicationsReport(json, thirdEffectDTO.getReqNo(),
					thirdEffectDTO.getLoanId(), thirdEffectDTO.getInterfaceCode());
			// 插入时效性中间表
			if (apiResponse.getCode() == RespStatus.SUCCESS.getCode()) {
				int effectTime = getLgdbEffectTime(); // 查询智盒子配置的临时时间有效性
				if (effectTime > 0) {
					thirdEffectDTO.setEffectTime(effectTime); // 临时使用，写死时间
					saveEdcDataCallOperationRecords(thirdEffectDTO);
				}
			}
		} else { // 时间有效期内有数据，不再查询第三方
			MarvelsLogUtil.getInstance().info("===LgdbBaiRongImpl.multipleApplicationsReport 时间有效期内有数据");
			apiResponse.setCode(RespStatus.SUCCESS.getCode());
			apiResponse.setMsg(RespStatus.SUCCESS.getMsg());
		}

		return apiResponse;
	}

	/**
	 * 多次申请核查v2(用户近7/15天、1/3/6个月在百融的虚拟信贷联盟(银行、非银、非银细分类型)中的多次信贷申请情况)
	 * 
	 * @param json
	 * @param reqMap
	 * @return
	 */
	public ApiResponse<SpecialList> specialListReport(JSONObject json, ThirdEffectDTO thirdEffectDTO) {
		MarvelsLogUtil.getInstance().info("===LgdbBaiRongImpl.specialListReport特殊名单核查=== json：" + json + " thirdEffectDTO：" + thirdEffectDTO);

		ApiResponse<SpecialList> apiResponse = new ApiResponse<SpecialList>();
		thirdEffectDTO.setInterfaceCode(ThirdMethodConstants.BR0001);
		/**
		 * 智盒子查询第三方时效性临时逻辑<BR>
		 * 1.直接拿身份证或者手机号码去时效性中间表里面查询，看是否存在有效记录 <BR>
		 * 2.如果存在，则取最新的一条记录，不再查询第三方<BR>
		 * 3.如果不存在，则直接查询第三方，成功后，向时效性中间表插入一条记录（有效时间写死）<BR>
		 */
		EdcDataCallOperationRecordsDto recordsDto = selectEdcDataCallOperationRecordSig(thirdEffectDTO);

		if (recordsDto == null) { // 时间有效期内无数据，直接查询第三方
			MarvelsLogUtil.getInstance().info("===LgdbBaiRongImpl.specialListReport 时间有效期内无数据");
			// 调用以前接口
			apiResponse = BaiRong.specialListReport(json, thirdEffectDTO.getReqNo(), thirdEffectDTO.getLoanId(),
					thirdEffectDTO.getInterfaceCode());
			// 插入时效性中间表
			if (apiResponse.getCode() == RespStatus.SUCCESS.getCode()) {
				int effectTime = getLgdbEffectTime(); // 查询智盒子配置的临时时间有效性
				if (effectTime > 0) {
					thirdEffectDTO.setEffectTime(effectTime); // 临时使用，写死时间
					saveEdcDataCallOperationRecords(thirdEffectDTO);
				}
			}
		} else { // 时间有效期内有数据，不再查询第三方
			MarvelsLogUtil.getInstance().info("===LgdbBaiRongImpl.specialListReport 时间有效期内有数据");
			apiResponse.setCode(RespStatus.SUCCESS.getCode());
			apiResponse.setMsg(RespStatus.SUCCESS.getMsg());
		}

		return apiResponse;
	}

}
